home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 July: Mac OS SDK / Dev.CD Jul 00 SDK2.toast / Development Kits / Hardware / Mac OS USB DDK / Mac OS USB DDK 1.4.1 / Examples / USBSampleStorageDriver / StorageClassPublicAPI.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-04-25  |  5.6 KB  |  187 lines  |  [TEXT/CWIE]

  1. /*
  2.     File:        StorageClassPublicAPI.h
  3.  
  4.     Contains:    This contains the API for all Shim and Storage Class Services
  5.  
  6.     Version:    1.3
  7.  
  8.     Copyright:    © 1998-2000 by Apple Computer, Inc., all rights reserved.
  9.  
  10.  
  11. */
  12.  
  13. #ifndef __STORAGECLASSPUBLICAPI__
  14. #define __STORAGECLASSPUBLICAPI__
  15.  
  16. #include <MacTypes.h>
  17. #include <USB.h>
  18.  
  19. // This driver requires USB Manager 1.3 or greater
  20. #define kMinimumUSBMgrVersion    0x01300000
  21.  
  22. // ~~~~~~~~~~~~~~~~~~~~~~~~~~ Storage Class API ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  23. #define kDispatchTableVersion    0x01000000
  24.  
  25. // Return codes from the class driver
  26. enum
  27. {
  28.     kCommandBusyError =  -10000,
  29.     kClassNotConfiguredError,
  30.     kRequestPending = 1
  31. };
  32.  
  33. // USB Mass Storage Services Control Call Selectors
  34. enum
  35. {
  36.     kUSBStorageControlAbortCommand = 0,
  37.     kUSBStorageControlSetParentsRefNumber = 1
  38. };
  39.  
  40. // USB Mass Storage Services Status Call Selectors
  41. enum
  42. {
  43.     kUSBStorageStatusGetServicesStatus = 0,
  44.     kUSBStorageStatusGetDeviceStatus,
  45.     kUSBStorageStatusGetRemovalStatus,
  46.     kUSBStorageStatusGetVendorStringPtr,
  47.     kUSBStorageStatusGetProductStringPtr,
  48.     kUSBStorageStatusGetDeviceReleaseNumber
  49. };
  50.  
  51. // Return results for the kUSBStorageStatusGetServicesStatus
  52. // USB Storage Services Status call
  53. enum
  54. {
  55.     kUSBStorageServicesNotConfigured =            0,
  56.     kUSBStorageServicesConfigureInProgress,
  57.     kUSBStorageServicesConfigureComplete,
  58.     kUSBStorageServicesConfigureFailed,
  59.     kUSBStorageServicesTerminated
  60. };
  61.  
  62. #define kUSBStorageAutoStatusSize    2        // Per the USB CBI Protocol
  63. #define kUSBStorageMaxCDBSize        12        // Per the USB Mass Storage Class spec.
  64.  
  65. typedef CALLBACK_API_C( void , StorageClassCompletionProcPtr )(void* storageClassPBPtr );
  66.  
  67. struct StorageExecuteCommandPB 
  68. {
  69.     UInt8                            cdb[kUSBStorageMaxCDBSize];                // -> CDB to send to device
  70.     UInt32                            flags;                                    // -> Data transfer flags (See below)
  71.     Ptr                                userBuffer;                                // -> Pointer to user buffer
  72.     StorageClassCompletionProcPtr    completionProc;                            // -> Completion routine
  73.     UInt32                            timeout;                                // -> Number of milliseconds until the command timesout
  74.     UInt32                            expectedCount;                            // -> Expected number of bytes to transfer
  75.     UInt32                            actualCount;                            // <- Actual number of bytes transferred
  76.     OSStatus                        status;                                    // <- Result of operation
  77.     UInt8                            autoStatus[kUSBStorageAutoStatusSize];     // <- Device status
  78.     Boolean                            autoStatusIsValid;                        // <- true indicates that the data in autoStatus is valid
  79.     UInt16                            reserved1;                                // Used for padding
  80. };
  81. typedef struct StorageExecuteCommandPB    StorageExecuteCommandPB;
  82. typedef StorageExecuteCommandPB *        StorageExecuteCommandPBPtr;
  83.  
  84. // Data transfer flags for StorageExecuteCommandPB
  85. enum 
  86. {
  87.     kStorageDataIn                    =    0x0001,
  88.     kStorageDataOut                 =    0x0002,
  89.     kStorageNoData                     =    0x0004,
  90.     kStorageSGBuffer                 =    0x0010,
  91.     kStorageUseCommandCompletionInt =    0x0100
  92. };
  93.  
  94. // Structures for Scatter-Gather list suppport
  95. // Read/Write a scatter-gather list entry point
  96. struct USBSGElement {
  97.     Ptr             SGAddr;
  98.     UInt32             SGCount;
  99. };
  100. typedef struct USBSGElement    USBSGElement, *USBSGElementPtr;
  101.  
  102. struct USBSGList
  103. {
  104.     UInt32            sgNumberElements;
  105.     USBSGElementPtr    sgElementList;    
  106. };
  107.  
  108. typedef struct USBSGList USBSGList, *USBSGListPtr;
  109.  
  110. typedef CALLBACK_API_C( OSStatus , StorageInitializeProcPtr )(void);
  111. typedef CALLBACK_API_C( OSStatus , StorageTerminateProcPtr )(void);
  112. typedef CALLBACK_API_C( OSStatus , StorageControlProcPtr )(UInt32 theControlSelector, void *theControlData);
  113. typedef CALLBACK_API_C( OSStatus , StorageStatusProcPtr )(UInt32 theInfoSelector, void *theInfo);
  114. typedef CALLBACK_API_C( OSStatus , StorageExecuteCommandProcPtr )( StorageExecuteCommandPBPtr storageExecuteCommandPBPtr );
  115.  
  116. struct StorageClassDispatchTable 
  117. {
  118.     UInt32                            dispatchTableVersion;
  119.     StorageInitializeProcPtr         pStorageInitialize;
  120.     StorageTerminateProcPtr             pStorageTerminate;
  121.     StorageControlProcPtr             pStorageControl;
  122.     StorageStatusProcPtr             pStorageStatus;
  123.     StorageExecuteCommandProcPtr    pStorageExecuteCmd;
  124. };
  125. typedef struct StorageClassDispatchTable    StorageClassDispatchTable;
  126. typedef StorageClassDispatchTable *            StorageClassDispatchTablePtr;
  127.  
  128. extern StorageClassDispatchTable TheStorageClassDispatchTable;
  129.  
  130. // ~~~~~~~~~~~~~~~~~~~~~~~~~~ Shim API ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  131. // The control calls the Shim makes to the Unit Table driver
  132. // to set the information from the Storage Class
  133. enum
  134. {
  135.     kInitializeDeviceAccess = 500,
  136.     kTerminateDeviceAccess = 501
  137. };
  138.  
  139. enum
  140. {
  141.     kUSBStorageEventRemoveManualEjectMedia = 1,
  142.     kUSBStorageEventManualEjectMediaWasRemoved,
  143.     kUSBStorageEventDeviceWasRemoved,
  144.     kUSBStorageEventUnusableMediaEjected
  145. };
  146.  
  147.  
  148. // Enumerations for Mass Storage Class Subclass types
  149. enum
  150. {
  151.     kUSBStorageRBCSubclass                 = 1,
  152.     kUSBStorageSFF8020iSubclass         = 2,
  153.     kUSBStorageQIC157Subclass            = 3,
  154.     kUSBStorageUFISubclass                = 4,
  155.     kUSBStorageSFF8070iSubclass            = 5,
  156.     kUSBStorageSCSITransparentSubclass    = 6
  157. };
  158.  
  159. typedef CALLBACK_API_C( OSStatus , StandardDialogProcPtr )(    DriverRefNum drvrRefNum, UInt16 messageNumber );
  160.  
  161. #define kCurrentUSBStorageClassDispatchTableVersion        0x00000001
  162.  
  163. struct StorageClassShimDispatchTable 
  164. {
  165.     StandardDialogProcPtr    DisplayDialog;
  166.     StandardDialogProcPtr    RemoveDialog;
  167. };
  168.  
  169. typedef struct StorageClassShimDispatchTable    StorageClassShimDispatchTable;
  170. typedef StorageClassShimDispatchTable *            StorageClassShimDispatchTablePtr;
  171.  
  172. struct USBStorageClassSetupTable 
  173. {
  174.     UInt32                                dispatchTableVersion;
  175.     USBDeviceRef                         usbDeviceRef;
  176.     USBDeviceRef                         usbParentRef;
  177.     UInt8                                 usbSubClass;
  178.     UInt16                                 usbVendor;
  179.     UInt16                                 usbProduct;
  180.     StorageClassShimDispatchTablePtr    shimDispatchTable;
  181.     StorageClassDispatchTablePtr        theStorageClassDispatchTable;
  182. };
  183.  
  184. typedef struct USBStorageClassSetupTable    USBStorageClassSetupTable;
  185. typedef USBStorageClassSetupTable *            USBStorageClassSetupTablePtr;
  186.  
  187. #endif